﻿'********************************************************************************
'*
'*      サーバーにコマンドへの送受信処理
'*
'*      File Name : clsDbServerCommand.vb
'*      Title     : サーバーにコマンドへの送受信処理
'*      機能    　： サーバーにコマンドへの送受信処理
'*
'********************************************************************************
'----------------------------------<<修正履歴>>----------------------------------
'ﾊﾞｰｼﾞｮﾝ   日付       作業者        ｺﾒﾝﾄ
'--------- ---------- ------------ -----------------------------------------------
' V1.0.9   2015/08/23 M.Hiroki     新規作成
'********************************************************************************

Option Strict On
Option Explicit On

Public Class clsDbServerCommand

    ''' <summary>
    ''' レシピファイル転送コマンドの発信
    ''' </summary>
    ''' <param name="szCmd"></param>
    ''' <remarks></remarks>
    Public Shared Sub SendRcpCommand(ByVal szCmd As String, ByVal szIP As String)

        Dim szSql = "INSERT INTO WOK.L_G_COMMAND_RECV "
        szSql = szSql & "(MPC_NO, CMD_SIZE, CMD_DATA, YYYYMMDD, CHK, SET_DATE, IPADRS) "
        szSql = szSql & "VALUES(?, ?, ?, TO_NUMBER(TO_CHAR(NOW(), 'yyyyMMdd'), '99999999'), ?, NOW(), ?)"

        Try
            DBacs.ExecuteUpdateSql(szSql, -1, _
                                   0, szCmd.Length, szCmd, 0, szIP)
        Catch ex As Exception
            MsgBox("DB Access Error " & System.Reflection.MethodBase.GetCurrentMethod.Name & ":" & ex.Message & ":Sql=" & szSql)
        End Try
    End Sub

    ''' <summary>
    ''' レシピファイル操作結果コードを取得する
    ''' </summary>
    ''' <param name="szIP">自機のIPアドレス</param>
    ''' <returns>取得した結果コード</returns>
    ''' <remarks></remarks>
    Public Shared Function GetRcpRespMsg(ByVal szIP As String) As String
        Dim szSql = "SELECT CMD_DATA FROM WOK.L_G_COMMAND_SEND "
        szSql = szSql & "WHERE CHK = 0 "
        szSql = szSql & "AND IPADRS = '" & szIP & "' "
        szSql = szSql & "ORDER BY SYS_CMD_ID DESC"

        Dim dtRslt As DataTable
        Try
            dtRslt = DBacs.ExecuteSql(szSql)
            If dtRslt.Rows.Count > 0 Then
                'コマンドから結果を取る
                GetRcpRespMsg = dtRslt.Rows(0)(0).ToString.Substring(76, 2)
                '読取済みに設定
                SetCmdChecked(szIP)
            Else
                GetRcpRespMsg = Nothing
            End If
        Catch ex As Exception
            MsgBox("DB Access Error " & System.Reflection.MethodBase.GetCurrentMethod.Name & ":" & ex.Message & ":Sql=" & szSql)
            GetRcpRespMsg = "Error!"
        End Try
    End Function

    ''' <summary>
    ''' レシピ照合装置データのファイル名を取得する
    ''' </summary>
    ''' <param name="szIP">自機のIPアドレス</param>
    ''' <returns>取得したファイル名或いはエラーコード</returns>
    ''' <remarks></remarks>
    Public Shared Function GetVerifDataFileNm(ByVal szIP As String, ByVal timer As Timer) As String
        Dim szSql = "SELECT CMD_DATA FROM WOK.L_G_COMMAND_SEND "
        szSql = szSql & "WHERE CHK = 0 "
        szSql = szSql & "AND IPADRS = '" & szIP & "' "
        szSql = szSql & "ORDER BY SYS_CMD_ID DESC"

        Dim dtRslt As DataTable
        Try
            dtRslt = DBacs.ExecuteSql(szSql)
            If dtRslt.Rows.Count > 0 Then
                '判定結果を取得する
                Dim szRslt As String = dtRslt.Rows(0)(0).ToString.Substring(206 + 8, 2).Trim
                If szRslt.Equals(OK) Then
                    'コマンドからファイル名を取得する
                    GetVerifDataFileNm = dtRslt.Rows(0)(0).ToString.Substring(209 + 8, 255).Trim
                Else
                    '成功以外の場合はエラーコードを返す
                    GetVerifDataFileNm = szRslt
                End If

                '読取済みに設定
                SetCmdChecked(szIP)
            Else
                GetVerifDataFileNm = String.Empty
            End If
        Catch ex As Exception
            GetVerifDataFileNm = RCP_ERR_FILE_RECV
            timer.Stop()
            MsgBox("DB Access Error " & System.Reflection.MethodBase.GetCurrentMethod.Name & ":" & ex.Message & ":Sql=" & szSql)
        End Try
    End Function

    '結果を「読取済み」にする
    Private Shared Sub SetCmdChecked(ByVal szIP As String)
        Dim szSql = "UPDATE WOK.L_G_COMMAND_SEND "
        szSql = szSql & "SET CHK = ? "   '1:読取済み
        szSql = szSql & "WHERE CHK = ? " '0:読取未
        szSql = szSql & "AND IPADRS = ?"

        Try
            DBacs.ExecuteUpdateSql(szSql, -1, 1, 0, szIP)
        Catch ex As Exception
            MsgBox("DB Access Error " & System.Reflection.MethodBase.GetCurrentMethod.Name & ":" & ex.Message & ":Sql=" & szSql)
        End Try
    End Sub

    ''' <summary>
    ''' ロット転送コマンドの発信
    ''' </summary>
    ''' <param name="szCmd"></param>
    ''' <remarks></remarks>
    Public Shared Sub SendLotCommand(ByVal szCmd As String, ByVal szIP As String)

        Dim szSql = "INSERT INTO WOK.L_C_COMMAND_RECV "
        szSql = szSql & "(MPC_NO, CMD_SIZE, CMD_DATA, YYYYMMDD, CHK, SET_DATE, IPADRS) "
        szSql = szSql & "VALUES(?, ?, ?, TO_NUMBER(TO_CHAR(NOW(), 'yyyyMMdd'), '99999999'), ?, NOW(), ?)"

        Try
            DBacs.ExecuteUpdateSql(szSql, -1, _
                                   0, szCmd.Length, szCmd, 0, szIP)
        Catch ex As Exception
            MsgBox("DB Access Error " & System.Reflection.MethodBase.GetCurrentMethod.Name & ":" & ex.Message & ":Sql=" & szSql)
        End Try
    End Sub

    ''' <summary>
    ''' ロット情報を取得
    ''' </summary>
    ''' <param name="szIP">自機のIPアドレス</param>
    ''' <returns>取得したロット情報或いはエラーコード</returns>
    ''' <remarks></remarks>
    Public Shared Function GetLotInfoData(ByVal szIP As String, ByVal timer As Timer) As DataTable
        Dim szSql = "SELECT CMD_DATA, SET_DATE FROM WOK.L_C_COMMAND_SEND "
        szSql = szSql & "WHERE CHK = 0 "
        szSql = szSql & "AND IPADRS = '" & szIP & "' "
        szSql = szSql & "ORDER BY SYS_CMD_ID DESC"

        Dim dt As DataTable = New DataTable
        dt.Columns.Add("CMD_DATA")
        dt.Columns.Add("SET_DATE")

        Dim dtRslt As DataTable
        Try
            dtRslt = DBacs.ExecuteSql(szSql)
            If dtRslt.Rows.Count > 0 Then
                '判定結果を取得する
                Dim szRslt As String = dtRslt.Rows(0)("CMD_DATA").ToString.Substring(3 + 8, 2).Trim
                'If szRslt.Equals(OK) Then
                '    GetLotInfoData = "成功しました。"
                'Else
                '    '成功以外の場合はエラーコードを返す
                '    GetLotInfoData = "失敗しました"
                'End If

                dt.Rows(0)("CMD_DATA") = szRslt
                dt.Rows(0)("SET_DATE") = dtRslt.Rows(0)("SET_DATE")

                '読取済みに設定
                SetLotCmdChecked(szIP)
                GetLotInfoData = dt
            Else
                GetLotInfoData = New DataTable
            End If
        Catch ex As Exception
            timer.Stop()
            dt.Rows(0)(0) = NG
            dt.Rows(0)(1) = Now()
            GetLotInfoData = dt
            MsgBox("DB Access Error " & System.Reflection.MethodBase.GetCurrentMethod.Name & ":" & ex.Message & ":Sql=" & szSql)
        End Try
    End Function

    '結果を「読取済み」にする
    Private Shared Sub SetLotCmdChecked(ByVal szIP As String)
        Dim szSql = "UPDATE WOK.L_C_COMMAND_SEND "
        szSql = szSql & "SET CHK = ? "   '1:読取済み
        szSql = szSql & "WHERE CHK = ? " '0:読取未
        szSql = szSql & "AND IPADRS = ?"

        Try
            DBacs.ExecuteUpdateSql(szSql, -1, 1, 0, szIP)
        Catch ex As Exception
            MsgBox("DB Access Error " & System.Reflection.MethodBase.GetCurrentMethod.Name & ":" & ex.Message & ":Sql=" & szSql)
        End Try
    End Sub
End Class
